const axios = require('axios');

/**
 * 阿里云百炼视觉AI服务
 */
class AliyunService {
  constructor() {
    this.apiKey = process.env.DASHSCOPE_API_KEY;
    this.baseUrl = process.env.DASHSCOPE_BASE_URL;
    this.apiKey = 'xxx'
    this.baseUrl = 'xxx'; // 默认使用北京地域


    if (!this.apiKey) {
      console.warn('警告: 未配置阿里云百炼API密钥(DASHSCOPE_API_KEY)');
      this.apiKey = 'xxx'
    }

    if (!this.baseUrl) {
      console.warn('警告: 未配置阿里云百炼API基础URL(DASHSCOPE_BASE_URL)');
      this.baseUrl = 'xxx'; // 默认使用北京地域
    }

    // 创建axios实例
    this.client = axios.create({
      baseURL: this.baseUrl,
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${this.apiKey}`
      },
      timeout: 60000 // 60秒超时
    });

    // 请求拦截器
    this.client.interceptors.request.use(
      config => {
        console.log(`发送请求到: ${config.url}`);
        return config;
      },
      error => {
        console.error('请求错误:', error);
        return Promise.reject(error);
      }
    );

    // 响应拦截器
    this.client.interceptors.response.use(
      response => {
        console.log(`响应状态: ${response.status}`);
        return response;
      },
      error => {
        console.error('响应错误:', error.response ? error.response.data : error.message);
        return Promise.reject(error);
      }
    );
  }

  /**
   * 调用阿里云百炼视觉模型进行图像分析
   * @param {Object} params - 参数对象
   * @param {string} params.base64Image - Base64编码的图像
   * @param {string} params.mimeType - 图像MIME类型
   * @param {string} params.model - 模型名称
   * @param {string} params.prompt - 用户提示
   * @param {string} params.systemPrompt - 系统提示
   * @returns {Promise<Object>} 分析结果
   */
  async analyzeImage({ base64Image, mimeType, model, prompt, systemPrompt }) {
    try {
      // 构建完整的图像URL
      const imageUrl = `data:${mimeType};base64,${base64Image}`;

      // 构建请求体
      const requestBody = {
        model,
        messages: [
          {
            role: "system",
            content: [
              {
                type: "text",
                text: systemPrompt
              }
            ]
          },
          {
            role: "user",
            content: [
              {
                type: "image_url",
                image_url: {
                  url: imageUrl
                }
              },
              {
                type: "text",
                text: prompt
              }
            ]
          }
        ]
      };

      console.log(`调用模型: ${model}`);

      // 发送请求
      const response = await this.client.post('/chat/completions', requestBody);

      // 检查响应数据
      if (!response.data || !response.data.choices || !response.data.choices[0]) {
        throw new Error('API响应格式异常');
      }

      // 返回处理后的结果
      return {
        result: response.data.choices[0].message.content,
        rawResponse: response.data
      };
    } catch (error) {
      // 处理错误
      if (error.response) {
        // 服务器返回错误
        const status = error.response.status;
        const data = error.response.data;

        if (status === 401) {
          throw new Error('API密钥无效或已过期');
        } else if (status === 403) {
          throw new Error('没有权限访问该资源');
        } else if (status === 429) {
          throw new Error('请求过于频繁，请稍后再试');
        } else if (data.error && data.error.message) {
          throw new Error(data.error.message);
        } else {
          throw new Error(`服务器错误: ${status}`);
        }
      } else if (error.request) {
        throw new Error('网络错误，请检查连接');
      } else {
        throw new Error(error.message || '请求失败');
      }
    }
  }
}

// 创建单例实例
const aliyunService = new AliyunService();

/**
 * 图像分析函数 - 调用阿里云服务
 * @param {Object} params - 分析参数
 * @returns {Promise<Object>} 分析结果
 */
async function analyzeImageWithAliyun(params) {
  return aliyunService.analyzeImage(params);
}

module.exports = {
  analyzeImageWithAliyun,
  AliyunService
};